package cn.huaqingcheng.tianshu.core.sys.adapter;

import cn.huaqingcheng.tianshu.common.core.ListTool;
import cn.huaqingcheng.tianshu.common.core.model.AttributeMap;
import cn.huaqingcheng.tianshu.common.core.model.TemporaryUrl;
import cn.huaqingcheng.tianshu.core.sys.model.SysFileScheme;
import org.jetbrains.annotations.Unmodifiable;

import java.io.InputStream;
import java.net.URI;
import java.util.List;
import java.util.Map;
import java.util.function.Function;

/**
 * 文件存储服务
 */
public interface FileStorageService {

    /**
     * 支持指定 scheme ?
     */
    boolean support(SysFileScheme scheme);

    /**
     * 保存文件
     *
     * @param is    文件字节
     * @param path  文件路径
     * @param attrs 文件属性
     * @return 文件信息
     */
    FileInfo save(InputStream is, String path, AttributeMap<Object> attrs);

    /**
     * 读取文件
     *
     * @param uri 文件URL
     * @return 字节流
     */
    InputStream read(URI uri);

    /**
     * 生成临时访问URL
     */
    TemporaryUrl temporaryUrl(URI uri);

    /**
     * 生成临时访问URL
     */
    @Unmodifiable
    default Map<URI, TemporaryUrl> temporaryUrl(List<URI> uriList) {
        return ListTool.isEmpty(uriList)
               ? Map.of()
               : ListTool.toMap(uriList, Function.identity(), this::temporaryUrl);
    }

}
